package com.atguigu.lease.web.admin.controller.apartment;


import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Tag(name = "支付方式管理")
@RequestMapping("/admin/payment")
@RestController
public class PaymentTypeController {


    @Autowired
    private PaymentTypeService paymentTypeService;

    /*
    * todo:实现逻辑 查询所有支付方式 单表查询
    *  todo: 注意事项
    *       1.需要添加逻辑删除配置（数据库添加字段 实体类添加属性 配置逻辑删除生效）
    *           BaseEntity->@TableLogic
    *       2.有些字段不能返回
    *           默认：因为返回的实体类就包含了对应的属性->spring mvc handlerAdapter ->json ->前端
    *           解决问题
    *                   ：Java->handlerAdapter->[jackson转化器]->json
    *               @JsonIgnore: 忽略实体类的某个属性不转成也不接收json数据
    *
    * todo:1.3 保存或者更新字符方式
        实现逻辑:接收到前端传递的支付方式的JS01数据,使用支付方式对象接收!最后调用mybatis-plus/service /save0rUpdate万法即可完成保存线者更新的动作!底层根据判断id值进行处理:11
        注意实现:
        创建或者修改时间没有填写
        方案1:笨方法 手动设盟
        方案2:mybatis-plus方法 自动填充功能
        指定填充字段和策略1。
        展性上->gTableFiled(fi1lFillType.Insert l Update )定义填充值实现类  MetaObjectHandler.
        @Component
        public class MybatisMetaObjectHandler implements MetaObjectHandler {
            @Override
            public void insertFill(MetaObject metaObject) {
                this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
            }
                @Override
                public void updateFill(MetaObject metaObject) {
                    this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
                    }
            }
            *数据库配置
                #查看表信总
                DESC payment_type;
        alter table payment_type modify is_deleted tinyint default 0;
    *
    *   todo:实现步骤
    *       1.注入service
    *       2.调用mybatis-plus查询方法
    *       3.集合装在result.ok(t)
    *       4.返回result对象
    *
    *
    * */





    @Operation(summary = "查询全部支付方式列表")
    @GetMapping("list")
    public Result<List<PaymentType>> listPaymentType() {
//        2.调用mybatis-plus查询方法
        List<PaymentType> list = paymentTypeService.list();
//           3.集合装在result.ok(t)
        Result<List<PaymentType>> result = Result.ok(list);
        //     4.返回result对象
        return result;
    }

    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")
    public Result saveOrUpdatePaymentType(@RequestBody PaymentType paymentType) {
        boolean is = paymentTypeService.saveOrUpdate(paymentType);

        if (is) {
            return Result.ok();
        }else{
            return Result.fail();
        }

    }

    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    public Result deletePaymentById(@RequestParam Long id) {
        paymentTypeService.removeById(id);
        return Result.ok();
    }

}















